home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2410 / 2410.xpi / chrome / content / shared / Base64.js next >
Text File  |  2010-01-28  |  4KB  |  152 lines

  1.  
  2. /**
  3. *
  4. *  Base64 encode / decode
  5. *  http://www.webtoolkit.info/
  6. *
  7. **/
  8.  
  9. (function() {
  10. var _Base64 = {
  11.  
  12.     // private property
  13.     _keyStr : 
  14.         "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  15.  
  16.     // public method for encoding
  17.     encode : function (input, isBinaryData) {
  18.         var output = [];
  19.         var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
  20.         var i = 0;
  21.  
  22.         input = isBinaryData ? String.fromCharCode.apply(null, input) : 
  23.             _Base64._utf8_encode(input);
  24.  
  25.         var len = input.length;
  26.         while (i < len) {
  27.             chr1 = input.charCodeAt(i++);
  28.             chr2 = input.charCodeAt(i++);
  29.             chr3 = input.charCodeAt(i++);
  30.             enc1 = chr1 >> 2;
  31.             enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  32.             enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  33.             enc4 = chr3 & 63;
  34.             if (isNaN(chr2)) {
  35.                 enc3 = enc4 = 64;
  36.             } else if (isNaN(chr3)) {
  37.                 enc4 = 64;
  38.             }
  39.             output.push(
  40.                 this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
  41.                 this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4));
  42.         }
  43.  
  44.         return output.join("");
  45.     },
  46.  
  47.     // public method for decoding
  48.     decode : function (input) {
  49.         if(!input)
  50.             return "";
  51.         var output = [];
  52.         var chr1, chr2, chr3;
  53.         var enc1, enc2, enc3, enc4;
  54.         var i = 0;
  55.  
  56.         input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  57.  
  58.         var len = input.length;
  59.         while (i < len) {
  60.             enc1 = this._keyStr.indexOf(input.charAt(i++));
  61.             enc2 = this._keyStr.indexOf(input.charAt(i++));
  62.             enc3 = this._keyStr.indexOf(input.charAt(i++));
  63.             enc4 = this._keyStr.indexOf(input.charAt(i++));
  64.             chr1 = (enc1 << 2) | (enc2 >> 4);
  65.             chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  66.             chr3 = ((enc3 & 3) << 6) | enc4;
  67.             output.push( String.fromCharCode(chr1));
  68.             if (enc3 != 64) {
  69.                 output.push(String.fromCharCode(chr2));
  70.             }
  71.             if (enc4 != 64) {
  72.                 output.push( String.fromCharCode(chr3));
  73.             }
  74.         }
  75.  
  76.         return  _Base64._utf8_decode(output.join(""));
  77.     },
  78.  
  79.     // private method for UTF-8 encoding
  80.     _utf8_encode : function (string) {
  81.         string = string.replace(/\r\n/g,"\n");
  82.         var utftext = [];
  83.         var len = string.length;
  84.  
  85.         for (var n = 0; n < len; n++) {
  86.  
  87.             var c = string.charCodeAt(n);
  88.  
  89.             if (c < 128) {
  90.                 utftext.push( String.fromCharCode(c));
  91.             }
  92.             else if((c > 127) & (c < 2048)) {
  93.                 utftext.push(String.fromCharCode((c >> 6) | 192),
  94.                     String.fromCharCode((c & 63) | 128));
  95.             }
  96.             else {
  97.                 utftext.push( String.fromCharCode((c >> 12) | 224),
  98.                     String.fromCharCode(((c >> 6) & 63) | 128),
  99.                     String.fromCharCode((c & 63) | 128));
  100.             }
  101.  
  102.         }
  103.  
  104.         return utftext.join("");
  105.     },
  106.  
  107.     // private method for UTF-8 decoding
  108.     _utf8_decode : function (utftext) {
  109.         var string = [];
  110.         var i = 0;
  111.         var c = c1 = c2 = 0;
  112.         var len = utftext.length;
  113.  
  114.         while ( i < len ) {
  115.  
  116.             c = utftext.charCodeAt(i);
  117.  
  118.             if (c < 128) {
  119.                 string.push(String.fromCharCode(c));
  120.                 i++;
  121.             }
  122.             else if((c > 191) & (c < 224)) {
  123.                 c2 = utftext.charCodeAt(i+1);
  124.                 string.push(String.fromCharCode(((c & 31) << 6) | (c2 & 63)));
  125.                 i += 2;
  126.             }
  127.             else {
  128.                 c2 = utftext.charCodeAt(i+1);
  129.                 c3 = utftext.charCodeAt(i+2);
  130.                 string.push( String.fromCharCode(((c & 15) << 12) | 
  131.                     ((c2 & 63) << 6) | (c3 & 63)));
  132.                 i += 3;
  133.             }
  134.  
  135.         }
  136.  
  137.         return string.join("");
  138.     }
  139. }
  140.  
  141.  
  142. if (typeof(window) != 'undefined' && window.Foxmarks) {
  143.     Foxmarks.provide('Foxmarks.ThirdParty.Base64');
  144.     Foxmarks.ThirdParty.Base64 = _Base64 ;
  145. } else {
  146.     Base64 = _Base64;
  147. }
  148.     
  149.  
  150.  
  151. })();
  152.